<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/Python-3.6.2/Include/methodobject.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/Python-3.6.2/Include/methodobject.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> 
<a name="2" /><span class="True">       2:</span> <span class="k">/* Method object interface */</span>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="macros_noref.html#_UHlfTUVUSE9ET0JKRUNUX0hfMA__"><span class="b">Py_METHODOBJECT_H</span></a>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfTUVUSE9ET0JKRUNUX0hfMA__"><span class="b">Py_METHODOBJECT_H</span></a>
<a name="6" /><span class="False">       6:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="7" /><span class="False">       7:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="8" /><span class="True">       8:</span> <span class="f">#</span><span class="n">endif</span>
<a name="9" /><span class="True">       9:</span> 
<a name="10" /><span class="True">      10:</span> <span class="k">/* This is about the type &apos;builtin_function_or_method&apos;,</span>
<a name="11" /><span class="True">      11:</span> <span class="k">   not Python methods in user-defined classes.  See classobject.h</span>
<a name="12" /><span class="True">      12:</span> <span class="k">   for the latter. */</span>
<a name="13" /><span class="True">      13:</span> 
<a name="14" /><span class="True">      14:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyCFunction_Type</span><span class="f">;</span>
<a name="15" /><span class="True">      15:</span> 
<a name="16" /><span class="True">      16:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlDRnVuY3Rpb25fQ2hlY2tfMA__"><span class="b">PyCFunction_Check</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">(</span><a href="macros_ref.html#_UHlfVFlQRV8w"><span class="b">Py_TYPE</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">==</span> <span class="f">&amp;</span><span class="b">PyCFunction_Type</span><span class="f">)</span>
<a name="17" /><span class="True">      17:</span> 
<a name="18" /><span class="True">      18:</span> <span class="m">typedef</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">(</span><span class="f">*</span><span class="b">PyCFunction</span><span class="f">)</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="19" /><span class="True">      19:</span> <span class="m">typedef</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">(</span><span class="f">*</span><span class="b">_PyCFunctionFast</span><span class="f">)</span> <span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">self</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">*</span><span class="b">args</span><span class="f">,</span>
<a name="20" /><span class="True">      20:</span>                                        <span class="b">Py_ssize_t</span> <span class="b">nargs</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">kwnames</span><span class="f">)</span><span class="f">;</span>
<a name="21" /><span class="True">      21:</span> <span class="m">typedef</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">(</span><span class="f">*</span><span class="b">PyCFunctionWithKeywords</span><span class="f">)</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span>
<a name="22" /><span class="True">      22:</span>                                              <span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="23" /><span class="True">      23:</span> <span class="m">typedef</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">(</span><span class="f">*</span><span class="b">PyNoArgsFunction</span><span class="f">)</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="24" /><span class="True">      24:</span> 
<a name="25" /><span class="True">      25:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyCFunction</span><span class="f">)</span> <span class="b">PyCFunction_GetFunction</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="26" /><span class="True">      26:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCFunction_GetSelf</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="27" /><span class="True">      27:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyCFunction_GetFlags</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="28" /><span class="True">      28:</span> 
<a name="29" /><span class="True">      29:</span> <span class="k">/* Macros for direct access to these values. Type checks are *not*</span>
<a name="30" /><span class="True">      30:</span> <span class="k">   done, so use with care. */</span>
<a name="31" /><span class="True">      31:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="32" /><span class="True">      32:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OXzA_"><span class="b">PyCFunction_GET_FUNCTION</span></a><span class="f">(</span><span class="b">func</span><span class="f">)</span> \
<a name="33" /><span class="True">      33:</span>         <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">PyCFunctionObject</span> <span class="f">*</span><span class="f">)</span><span class="b">func</span><span class="f">)</span> <span class="f">-&gt;</span> <span class="b">m_ml</span> <span class="f">-&gt;</span> <span class="b">ml_meth</span><span class="f">)</span>
<a name="34" /><span class="True">      34:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlDRnVuY3Rpb25fR0VUX1NFTEZfMA__"><span class="b">PyCFunction_GET_SELF</span></a><span class="f">(</span><span class="b">func</span><span class="f">)</span> \
<a name="35" /><span class="True">      35:</span>         <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">PyCFunctionObject</span> <span class="f">*</span><span class="f">)</span><span class="b">func</span><span class="f">)</span> <span class="f">-&gt;</span> <span class="b">m_ml</span> <span class="f">-&gt;</span> <span class="b">ml_flags</span> <span class="f">&amp;</span> <a href="macros_noref.html#_TUVUSF9TVEFUSUNfMA__"><span class="b">METH_STATIC</span></a> <span class="f">?</span> \
<a name="36" /><span class="True">      36:</span>          <a href="macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a> <span class="f">:</span> <span class="f">(</span><span class="f">(</span><span class="b">PyCFunctionObject</span> <span class="f">*</span><span class="f">)</span><span class="b">func</span><span class="f">)</span> <span class="f">-&gt;</span> <span class="b">m_self</span><span class="f">)</span>
<a name="37" /><span class="True">      37:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlDRnVuY3Rpb25fR0VUX0ZMQUdTXzA_"><span class="b">PyCFunction_GET_FLAGS</span></a><span class="f">(</span><span class="b">func</span><span class="f">)</span> \
<a name="38" /><span class="True">      38:</span>         <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">PyCFunctionObject</span> <span class="f">*</span><span class="f">)</span><span class="b">func</span><span class="f">)</span> <span class="f">-&gt;</span> <span class="b">m_ml</span> <span class="f">-&gt;</span> <span class="b">ml_flags</span><span class="f">)</span>
<a name="39" /><span class="True">      39:</span> <span class="f">#</span><span class="n">endif</span>
<a name="40" /><span class="True">      40:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCFunction_Call</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="41" /><span class="True">      41:</span> 
<a name="42" /><span class="True">      42:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="43" /><span class="True">      43:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyCFunction_FastCallDict</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">func</span><span class="f">,</span>
<a name="44" /><span class="True">      44:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="f">*</span><span class="b">args</span><span class="f">,</span>
<a name="45" /><span class="True">      45:</span>     <span class="b">Py_ssize_t</span> <span class="b">nargs</span><span class="f">,</span>
<a name="46" /><span class="True">      46:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">kwargs</span><span class="f">)</span><span class="f">;</span>
<a name="47" /><span class="True">      47:</span> 
<a name="48" /><span class="True">      48:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyCFunction_FastCallKeywords</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">func</span><span class="f">,</span>
<a name="49" /><span class="True">      49:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="f">*</span><span class="b">stack</span><span class="f">,</span>
<a name="50" /><span class="True">      50:</span>     <span class="b">Py_ssize_t</span> <span class="b">nargs</span><span class="f">,</span>
<a name="51" /><span class="True">      51:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">kwnames</span><span class="f">)</span><span class="f">;</span>
<a name="52" /><span class="True">      52:</span> <span class="f">#</span><span class="n">endif</span>
<a name="53" /><span class="True">      53:</span> 
<a name="54" /><span class="True">      54:</span> <span class="m">struct</span> <span class="b">PyMethodDef</span> <span class="f">{</span>
<a name="55" /><span class="True">      55:</span>     <span class="m">const</span> <span class="m">char</span>  <span class="f">*</span><span class="b">ml_name</span><span class="f">;</span>   <span class="k">/* The name of the built-in function/method */</span>
<a name="56" /><span class="True">      56:</span>     <span class="b">PyCFunction</span> <span class="b">ml_meth</span><span class="f">;</span>    <span class="k">/* The C function that implements it */</span>
<a name="57" /><span class="True">      57:</span>     <span class="m">int</span>         <span class="b">ml_flags</span><span class="f">;</span>   <span class="k">/* Combination of METH_xxx flags, which mostly</span>
<a name="58" /><span class="True">      58:</span> <span class="k">                               describe the args expected by the C func */</span>
<a name="59" /><span class="True">      59:</span>     <span class="m">const</span> <span class="m">char</span>  <span class="f">*</span><span class="b">ml_doc</span><span class="f">;</span>    <span class="k">/* The __doc__ attribute, or NULL */</span>
<a name="60" /><span class="True">      60:</span> <span class="f">}</span><span class="f">;</span>
<a name="61" /><span class="True">      61:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">PyMethodDef</span> <span class="b">PyMethodDef</span><span class="f">;</span>
<a name="62" /><span class="True">      62:</span> 
<a name="63" /><span class="True">      63:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlDRnVuY3Rpb25fTmV3XzA_"><span class="b">PyCFunction_New</span></a><span class="f">(</span><span class="b">ML</span><span class="f">,</span> <span class="b">SELF</span><span class="f">)</span> <span class="b">PyCFunction_NewEx</span><span class="f">(</span><span class="f">(</span><span class="b">ML</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">SELF</span><span class="f">)</span><span class="f">,</span> <a href="macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="64" /><span class="True">      64:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCFunction_NewEx</span><span class="f">(</span><span class="b">PyMethodDef</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span>
<a name="65" /><span class="True">      65:</span>                                          <span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="66" /><span class="True">      66:</span> 
<a name="67" /><span class="True">      67:</span> <span class="k">/* Flag passed to newmethodobject */</span>
<a name="68" /><span class="True">      68:</span> <span class="k">/* #define METH_OLDARGS  0x0000   -- unsupported now */</span>
<a name="69" /><span class="True">      69:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_TUVUSF9WQVJBUkdTXzA_"><span class="b">METH_VARARGS</span></a>  <span class="c">0x0001</span>
<a name="70" /><span class="True">      70:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_TUVUSF9LRVlXT1JEU18w"><span class="b">METH_KEYWORDS</span></a> <span class="c">0x0002</span>
<a name="71" /><span class="True">      71:</span> <span class="k">/* METH_NOARGS and METH_O must not be combined with the flags above. */</span>
<a name="72" /><span class="True">      72:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_TUVUSF9OT0FSR1NfMA__"><span class="b">METH_NOARGS</span></a>   <span class="c">0x0004</span>
<a name="73" /><span class="True">      73:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_TUVUSF9PXzA_"><span class="b">METH_O</span></a>        <span class="c">0x0008</span>
<a name="74" /><span class="True">      74:</span> 
<a name="75" /><span class="True">      75:</span> <span class="k">/* METH_CLASS and METH_STATIC are a little different; these control</span>
<a name="76" /><span class="True">      76:</span> <span class="k">   the construction of methods for a class.  These cannot be used for</span>
<a name="77" /><span class="True">      77:</span> <span class="k">   functions in modules. */</span>
<a name="78" /><span class="True">      78:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_TUVUSF9DTEFTU18w"><span class="b">METH_CLASS</span></a>    <span class="c">0x0010</span>
<a name="79" /><span class="True">      79:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_TUVUSF9TVEFUSUNfMA__"><span class="b">METH_STATIC</span></a>   <span class="c">0x0020</span>
<a name="80" /><span class="True">      80:</span> 
<a name="81" /><span class="True">      81:</span> <span class="k">/* METH_COEXIST allows a method to be entered even though a slot has</span>
<a name="82" /><span class="True">      82:</span> <span class="k">   already filled the entry.  When defined, the flag allows a separate</span>
<a name="83" /><span class="True">      83:</span> <span class="k">   method, &quot;__contains__&quot; for example, to coexist with a defined</span>
<a name="84" /><span class="True">      84:</span> <span class="k">   slot like sq_contains. */</span>
<a name="85" /><span class="True">      85:</span> 
<a name="86" /><span class="True">      86:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_TUVUSF9DT0VYSVNUXzA_"><span class="b">METH_COEXIST</span></a>   <span class="c">0x0040</span>
<a name="87" /><span class="True">      87:</span> 
<a name="88" /><span class="True">      88:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="89" /><span class="True">      89:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_TUVUSF9GQVNUQ0FMTF8w"><span class="b">METH_FASTCALL</span></a>  <span class="c">0x0080</span>
<a name="90" /><span class="True">      90:</span> 
<a name="91" /><span class="True">      91:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="92" /><span class="True">      92:</span>     <a href="macros_ref.html#_UHlPYmplY3RfSEVBRF8w"><span class="b">PyObject_HEAD</span></a>
<a name="93" /><span class="True">      93:</span>     <span class="b">PyMethodDef</span> <span class="f">*</span><span class="b">m_ml</span><span class="f">;</span> <span class="k">/* Description of the C function to call */</span>
<a name="94" /><span class="True">      94:</span>     <span class="b">PyObject</span>    <span class="f">*</span><span class="b">m_self</span><span class="f">;</span> <span class="k">/* Passed as &apos;self&apos; arg to the C func, can be NULL */</span>
<a name="95" /><span class="True">      95:</span>     <span class="b">PyObject</span>    <span class="f">*</span><span class="b">m_module</span><span class="f">;</span> <span class="k">/* The __module__ attribute, can be anything */</span>
<a name="96" /><span class="True">      96:</span>     <span class="b">PyObject</span>    <span class="f">*</span><span class="b">m_weakreflist</span><span class="f">;</span> <span class="k">/* List of weak references */</span>
<a name="97" /><span class="True">      97:</span> <span class="f">}</span> <span class="b">PyCFunctionObject</span><span class="f">;</span>
<a name="98" /><span class="True">      98:</span> <span class="f">#</span><span class="n">endif</span>
<a name="99" /><span class="True">      99:</span> 
<a name="100" /><span class="True">     100:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyCFunction_ClearFreeList</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="101" /><span class="True">     101:</span> 
<a name="102" /><span class="True">     102:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="103" /><span class="True">     103:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="b">_PyCFunction_DebugMallocStats</span><span class="f">(</span><span class="b">FILE</span> <span class="f">*</span><span class="b">out</span><span class="f">)</span><span class="f">;</span>
<a name="104" /><span class="True">     104:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="b">_PyMethod_DebugMallocStats</span><span class="f">(</span><span class="b">FILE</span> <span class="f">*</span><span class="b">out</span><span class="f">)</span><span class="f">;</span>
<a name="105" /><span class="True">     105:</span> <span class="f">#</span><span class="n">endif</span>
<a name="106" /><span class="True">     106:</span> 
<a name="107" /><span class="False">     107:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="108" /><span class="False">     108:</span> <span class="f">}</span>
<a name="109" /><span class="True">     109:</span> <span class="f">#</span><span class="n">endif</span>
<a name="110" /><span class="True">     110:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !Py_METHODOBJECT_H */</span>
<a name="111" /><span class="True">     111:</span> </pre>
  </body>
</html>
